package paidaxing.blog.post.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import org.springframework.beans.factory.annotation.Autowired;
import paidaxing.blog.common.result.PageResult;
import paidaxing.blog.common.result.Result;
import paidaxing.blog.post.dto.CategoryDTO;
import paidaxing.blog.post.dto.PostDTO;
import paidaxing.blog.post.dto.request.CategoryRequestDTO;
import paidaxing.blog.post.dto.request.PostQueryRequest;
import paidaxing.blog.post.service.CategoriesService;

/**
 * 分类控制器
 */
@Slf4j
@RestController
@RequestMapping("/categories")
public class CategoryController {

    @Autowired
    private CategoriesService categoriesService;

    /**
     * 获取分类列表
     * 
     * @param page 页码
     * @param size 每页大小
     * @return 分类列表
     */
    @GetMapping
    public Result<PageResult<CategoryDTO>> listCategories(
            @RequestParam(defaultValue = "1") Integer page,
            @RequestParam(defaultValue = "10") Integer size) {
        if (log.isInfoEnabled()) {
            log.info("获取分类列表，页码: {}, 大小: {}", page, size);
        }
        
        PageResult<CategoryDTO> pageResult = categoriesService.listCategories(page, size);
        return Result.success("获取分类列表成功!", pageResult);
    }

    /**
     * 创建分类
     * 
     * @param categoryRequestDTO 分类请求DTO
     * @return 创建的分类
     */
    @PostMapping
    public Result<CategoryDTO> createCategory(@RequestBody CategoryRequestDTO categoryRequestDTO) {
        if (log.isInfoEnabled()) {
            log.info("创建分类: {}", categoryRequestDTO);
        }
        
        CategoryDTO categoryDTO = categoriesService.createCategory(categoryRequestDTO);
        return Result.success("创建分类成功!", categoryDTO);
    }

    /**
     * 更新分类
     * 
     * @param id 分类ID
     * @param categoryRequestDTO 分类请求DTO
     * @return 更新的分类
     */
    @PutMapping("/{id}")
    public Result<CategoryDTO> updateCategory(@PathVariable Long id, @RequestBody CategoryRequestDTO categoryRequestDTO) {
        if (log.isInfoEnabled()) {
            log.info("更新分类: {}, ID: {}", categoryRequestDTO, id);
        }
        
        CategoryDTO categoryDTO = categoriesService.updateCategory(id, categoryRequestDTO);
        if (categoryDTO == null) {
            return Result.failed("分类不存在");
        }
        return Result.success("更新分类成功!", categoryDTO);
    }

    /**
     * 删除分类
     * 
     * @param id 分类ID
     * @return 删除结果
     */
    @DeleteMapping("/{id}")
    public Result<String> deleteCategory(@PathVariable Long id) {
        if (log.isInfoEnabled()) {
            log.info("删除分类，ID: {}", id);
        }
        
        boolean result = categoriesService.deleteCategory(id);
        if (!result) {
            return Result.failed("分类不存在");
        }
        return Result.success("删除分类成功!");
    }

    /**
     * 获取分类下的文章
     * 
     * @param id 分类ID
     * @param queryRequest 查询条件
     * @return 文章列表
     */
    @GetMapping("/{id}/posts")
    public Result<PageResult<PostDTO>> getPostsByCategory(@PathVariable Long id, PostQueryRequest queryRequest) {
        if (log.isInfoEnabled()) {
            log.info("获取分类下的文章，分类ID: {}, 查询条件: {}", id, queryRequest);
        }
        
        PageResult<PostDTO> pageResult = categoriesService.getPostsByCategory(id, queryRequest);
        return Result.success("获取分类下的文章成功!", pageResult);
    }
}